home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 3 No 058 < prev    next >
Internet Message Format  |  1997-05-06  |  66KB

  1. From: pottier@clipper.ens.fr (Francois Pottier)
  2. Subject: csmp-digest-v3-058
  3. Date: Thu, 15 Sep 1994 13:51:12 +0200 (MET DST)
  4.  
  5. C.S.M.P. Digest             Thu, 15 Sep 94       Volume 3 : Issue 58
  6.  
  7. Today's Topics:
  8.  
  9.         AppleEvents for command line args (argc, argv)?
  10.         Exception Handling
  11.         NIM on develop, as of 19
  12.         Need to Stop flashing Desktop when changing palletes
  13.         PPostEvent mouse events
  14.         Sample MacTcp Programs
  15.         Selecting Window via menus
  16.         SetDialogDefaultItem real?
  17.         Stack sniffer - how can I turn it off?
  18.  
  19.  
  20.  
  21. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  22. (pottier@clipper.ens.fr).
  23.  
  24. The digest is a collection of article threads from the internet newsgroup
  25. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  26. regularly and want an archive of the discussions.  If you don't know what a
  27. newsgroup is, you probably don't have access to it.  Ask your systems
  28. administrator(s) for details.  If you don't have access to news, you may
  29. still be able to post messages to the group by using a mail server like
  30. anon.penet.fi (mail help@anon.penet.fi for more information).
  31.  
  32. Each issue of the digest contains one or more sets of articles (called
  33. threads), with each set corresponding to a 'discussion' of a particular
  34. subject.  The articles are not edited; all articles included in this digest
  35. are in their original posted form (as received by our news server at
  36. nef.ens.fr).  Article threads are not added to the digest until the last
  37. article added to the thread is at least two weeks old (this is to ensure that
  38. the thread is dead before adding it to the digest).  Article threads that
  39. consist of only one message are generally not included in the digest.
  40.  
  41. The digest is officially distributed by two means, by email and ftp.
  42.  
  43. If you want to receive the digest by mail, send email to listserv@ens.fr
  44. with no subject and one of the following commands as body:
  45.     help                        Sends you a summary of commands
  46.     subscribe csmp-digest Your Name    Adds you to the mailing list
  47.     signoff csmp-digest            Removes you from the list
  48. Once you have subscribed, you will automatically receive each new
  49. issue as it is created.
  50.  
  51. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  52. Questions related to the ftp site should be directed to
  53. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  54. digest are available there.
  55.  
  56. Also, the digests are available to WAIS users.  To search back issues
  57. with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
  58. http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
  59.  
  60.  
  61. -------------------------------------------------------
  62.  
  63. >From rhn@waltz.engr.sgi.com (Ron Nicholson)
  64. Subject: AppleEvents for command line args (argc, argv)?
  65. Date: Wed, 24 Aug 1994 18:05:15 GMT
  66. Organization: Silicon Graphics, Inc., Mountain View, CA
  67.  
  68. Are there AppleEvents suitable for passing a unix style command line
  69. to a ported Unix C application?  I handle the 4 required AppleEvents
  70. in a wrapper, but that's not enough to pass all the args needed to
  71. a ported app.
  72.  
  73. Thanks,
  74.  
  75. Ronald H. Nicholson, Jr.    rhn@engr.sgi.com, rhn@netcom.com, N6YWU
  76. #include <canonical.disclaimer>     // I speak only for myself, etc.
  77.  
  78. +++++++++++++++++++++++++++
  79.  
  80. >From rhn@netcom.com (Ron Nicholson)
  81. Date: Thu, 1 Sep 1994 05:51:04 GMT
  82. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  83.  
  84. In article <Cv1wwr.4H2@odin.corp.sgi.com> I wrote:
  85. >Are there AppleEvents suitable for passing a unix style command line
  86. >to a ported Unix C application?  I handle the 4 required AppleEvents
  87. >in a wrapper, but that's not enough to pass all the args needed to
  88. >a ported app.
  89.  
  90. Thanks for all the replies.  Several people recommended using the
  91. DoScript ('dosc') command, part of the misc suite.  I tried using the
  92. DoScript command and it works just fine.
  93.  
  94. Inside my initialization code for the required handlers I added:
  95.  
  96.     err = AEInstallEventHandler('misc', kAEDoScript,
  97.                 NewAEEventHandlerProc(myHandleDoScript), 0, false);
  98.  
  99. // 'misc' == kAEMiscSuite ; couldn't find it in my headers files.
  100.  
  101. Inside the myHandleDoScript AE handler routine I used:
  102.  
  103.     err = AEGetParamPtr(aevt, keyDirectObject, typeChar,
  104.                 &typeCode, myParamTextBuffer, 256L, &actualSize);
  105.  
  106. This puts a string of text into myParamTextBuffer that can be parsed
  107. into parameters or commands (in the main loop, NOT in the handler).
  108.  
  109. Do I need to do anything else to make this bulletproof?
  110.  
  111. I needed an aete resource containing DoScript and the required
  112. AppleEvents.  I found one inside the ToolServer 1.1 application.  I
  113. just copied it since I don't have an aete editor.
  114.  
  115. I'm going to try this for porting standalone unix filters like grep.
  116. >>> Tell application "grep" to DoScript "grep -i foo somefile.txt"
  117. Something like "grep bar < infile > outfile" should work for unix style
  118. file names in a default directory.  I suppose something like this could
  119. be packaged up with a dropshell to make it a scriptshell.
  120.  
  121. - -
  122. Ronald H. Nicholson, Jr.    rhn@netcom.com, rhn@engr.sgi.com, N6YWU
  123. #include <canonical.disclaimer>     // I speak only for myself, etc.
  124.  
  125.  
  126. ---------------------------
  127.  
  128. >From stara@holmes.ece.orst.edu (Aaron Starr)
  129. Subject: Exception Handling
  130. Date: 29 Aug 1994 18:58:11 GMT
  131. Organization: College of Engineering, Oregon State University
  132.  
  133.  
  134. Until we have a compiler that supports exception handling, I need to use
  135. some sort of approximation in my code.  Anyone have any preferences?
  136.  
  137. I know that Symantec has an exception library for TCL, as well as a
  138. Bedrock exception library, and I know that Metrowerks has something
  139. similar for PowerPlant.  Does anyone know which of these is most similar
  140. to likely implementations in the compiler?
  141.  
  142. Thanks for info,
  143.  
  144. Aaron Starr
  145. stara@ece.orst.edu
  146.  
  147. +++++++++++++++++++++++++++
  148.  
  149. >From afcjlloyd@aol.com (AFC JLloyd)
  150. Date: 30 Aug 1994 02:59:30 -0400
  151. Organization: America Online, Inc. (1-800-827-6364)
  152.  
  153. Aaron Starr (stara@holmes.ece.orst.edu ) writes:
  154.  
  155. >Until we have a compiler that supports exception handling, I need to use
  156. >some sort of approximation in my code.  Anyone have any preferences?
  157. >I know that Symantec has an exception library for TCL, as well as a
  158. >Bedrock exception library, and I know that Metrowerks has something
  159. >similar for PowerPlant.  Does anyone know which of these is most similar
  160. >to likely implementations in the compiler?
  161.  
  162. I'm the engineer who did most of the work on BEL.  If your criteria is
  163. compatibility to the C++ standard, then I think BEL is your best choice. 
  164. Of course, I'm biased, but let me try to give you enough facts so that you
  165. can make an objective decision.
  166.  
  167. The original TCL exception handling implementation made no attempt to
  168. throw/catch objects, and no attempt to delete stack-based objects as the
  169. stack is unwound.
  170.  
  171. The PowerPlant mechanism does not throw objects, though it does delete
  172. stack-based objects.  However, it calls constructors for partially
  173. constructed objects, and doesn't prevent memory leaks when exceptions are
  174. thrown from constructors of objects that are being allocated from the
  175. heap.
  176.  
  177. BEL does throw/catch objects; in fact, BEL only throws objects.  It
  178. doesn't allow throwing of arbitrary types like integers and strings.  Of
  179. course, you can package integers and strings inside exception classes of
  180. your own design.
  181.  
  182. BEL properly deletes stack based objects as the stack is unwound. 
  183. Destructors are called only for fully constructed objects.  However, BEL
  184. doesn't do this automatically; you must insert a macro call at the end of
  185. every constructor and the start of every destructor for the classes that
  186. need automatic cleanup.  You must also derive such classes from a special
  187. class.  If you use multiple inheritance there are some restrictions; the
  188. major one being that you can't inherit from the special "CAutoDestruct"
  189. class more than once, and virtual base classes are not supported.  If you
  190. use mixin style inheritance, then your mixin classes should not be derived
  191. from CAutoDestruct.
  192.  
  193. BEL also handles the case where an object is allocated from the heap using
  194. operator new and an exception is thrown from the constructor.  In this
  195. case, the raw memory allocated (with ::operator new()) must be deleted by
  196. the exception handling mechanism.
  197.  
  198. The BEL macros that implement the programming interface are designed to be
  199. compatible with the C++ exception handling syntax.  When compilers provide
  200. exception handling, BEL's macros can be redefined to the C++ syntax.  You
  201. can then recompile your code without making any changes to take advantage
  202. of the compilers support.  Of course, you can then globally replace the
  203. macros with the real syntax, but there may be good reasons to continue
  204. using the macros for a while.   For example, an implementation of BEL for
  205. Windows exists, so if you write cross platform code using BEL you will
  206. want to wait to use the true C++ syntax until all of your compilers
  207. support exceptions (and do so relatively bug-free).
  208.  
  209. Finally, even though Bedrock is no more, the OpenDoc Parts Framework (OPF)
  210. is being developed with BEL.  I am now a contractor at Apple working on
  211. OPF, and I am enhancing BEL as part of the contract.
  212.  
  213. What is the downside to BEL?  The main issue is performance and code size.
  214.  There are lots of things a compiler can do that can't be done using
  215. portable C++ code; that is why Stroustrup wanted exceptions in the
  216. language, and not just a part of the standard library.  You'll have to
  217. settle with some overhead until the compilers implement exceptions.  There
  218. are of course other compromises.
  219.  
  220. Jim Lloyd
  221. afcjlloyd@aol.com  -or- Jim_Lloyd@powertalk.apple.com
  222.  
  223.  
  224. +++++++++++++++++++++++++++
  225.  
  226. >From jahess@metrowerks.com (Jonathan Hess)
  227. Date: 30 Aug 1994 18:53:50 GMT
  228. Organization: ViviStar Consulting
  229.  
  230. In article <33tb43$1r2@engr.orst.edu>
  231. stara@holmes.ece.orst.edu (Aaron Starr) writes:
  232.  
  233. > I know that Symantec has an exception library for TCL, as well as a
  234. > Bedrock exception library, and I know that Metrowerks has something
  235. > similar for PowerPlant.  Does anyone know which of these is most similar
  236. > to likely implementations in the compiler?
  237.  
  238. TCL 2 uses the Bedrock exception library "BEL."  Once you get past the
  239. macros, BEL probably is closer to C++ exceptions for throwing actual
  240. objects and the like.
  241.  
  242. But, if you like simplicity, UExceptions from PowerPlant is REAL clean.
  243.  
  244. In both cases you'll probably be able to global GREP search and
  245. replaces for C++ exceptions.
  246.  
  247. As for my personal preference... well I'm biased.   :)
  248.  
  249. , Jonathan Hess
  250. Metrowerks, Inc.
  251. jahess@metrowerks.com
  252.  
  253. +++++++++++++++++++++++++++
  254.  
  255. >From afcjlloyd@aol.com (AFC JLloyd)
  256. Date: 31 Aug 1994 03:16:03 -0400
  257. Organization: America Online, Inc. (1-800-827-6364)
  258.  
  259. In article <33vv7u$7i4@tracker.ramp.com>, jahess@metrowerks.com (Jonathan
  260. Hess) writes:
  261.  
  262. >In article <33tb43$1r2@engr.orst.edu>
  263. >stara@holmes.ece.orst.edu (Aaron Starr) writes:
  264. >
  265. >> I know that Symantec has an exception library for TCL, as well as a
  266. >> Bedrock exception library, and I know that Metrowerks has something
  267. >> similar for PowerPlant.  Does anyone know which of these is most
  268. similar
  269. >> to likely implementations in the compiler?
  270. >
  271. >TCL 2 uses the Bedrock exception library "BEL."  Once you get past the
  272. >macros, BEL probably is closer to C++ exceptions for throwing actual
  273. >objects and the like.
  274. >
  275. >But, if you like simplicity, UExceptions from PowerPlant is REAL clean.
  276. >
  277. >In both cases you'll probably be able to global GREP search and
  278. >replaces for C++ exceptions.
  279. >
  280. >As for my personal preference... well I'm biased.   :)
  281.  
  282. The number one design criteria for BEL was to be "sufficiently" close to
  283. the C++ standard.  To achieve this we wanted application developers to be
  284. able to write exception handling code in almost exactly the same style
  285. they would use with C++ exceptions, with only minimal restrictions, and
  286. that code written using BEL could be recompiled without changes and work
  287. correctly when compilers support C++ exceptions.
  288.  
  289. Alas, this criteria often precluded simplicity.
  290.  
  291. As it happens, I spend a little of my spare time working on an idea I have
  292. for an educational game.  The exception library I wrote for it is even
  293. simpler than PowerPlant's UExceptions.  You see, I too believe that for
  294. some applications, simplicity is more important than adherence to some
  295. external standard.
  296.  
  297. Jim Lloyd
  298. afcjlloyd@aol.com -or- Jim_Lloyd@powertalk.apple.com
  299.  
  300.  
  301. +++++++++++++++++++++++++++
  302.  
  303. >From sparent@mv.us.adobe.com (Sean Parent)
  304. Date: Wed, 31 Aug 1994 20:49:22 GMT
  305. Organization: Adobe Systems Incorporated
  306.  
  307. How does BEL handle the case of an auto-destruct member within another
  308. auto-destruct derived class? That is, how do you handle:
  309.  
  310. class CFoo : CAutoDestruct {
  311.    ...
  312. }
  313. class CBar : CAutoDestruct {
  314.    CFoo  fooMember;
  315. }
  316.  
  317. void Test {
  318.    CBar bar;
  319.    CFoo foo;
  320.    Failure(); // or throw
  321. }
  322.  
  323. You need to thread foo and bar onto your exception stack but not fooMember
  324. (since it's destructor will get called when bar is destructed).
  325.  
  326. Sean
  327.  
  328. In article <341anj$sv3@search01.news.aol.com>, afcjlloyd@aol.com (AFC
  329. JLloyd) wrote:
  330.  
  331. > In article <33vv7u$7i4@tracker.ramp.com>, jahess@metrowerks.com (Jonathan
  332. > Hess) writes:
  333. > >In article <33tb43$1r2@engr.orst.edu>
  334. > >stara@holmes.ece.orst.edu (Aaron Starr) writes:
  335. > >
  336. > >> I know that Symantec has an exception library for TCL, as well as a
  337. > >> Bedrock exception library, and I know that Metrowerks has something
  338. > >> similar for PowerPlant.  Does anyone know which of these is most
  339. > similar
  340. > >> to likely implementations in the compiler?
  341. > >
  342. > >TCL 2 uses the Bedrock exception library "BEL."  Once you get past the
  343. > >macros, BEL probably is closer to C++ exceptions for throwing actual
  344. > >objects and the like.
  345. > >
  346. > >But, if you like simplicity, UExceptions from PowerPlant is REAL clean.
  347. > >
  348. > >In both cases you'll probably be able to global GREP search and
  349. > >replaces for C++ exceptions.
  350. > >
  351. > >As for my personal preference... well I'm biased.   :)
  352. > The number one design criteria for BEL was to be "sufficiently" close to
  353. > the C++ standard.  To achieve this we wanted application developers to be
  354. > able to write exception handling code in almost exactly the same style
  355. > they would use with C++ exceptions, with only minimal restrictions, and
  356. > that code written using BEL could be recompiled without changes and work
  357. > correctly when compilers support C++ exceptions.
  358. > Alas, this criteria often precluded simplicity.
  359. > As it happens, I spend a little of my spare time working on an idea I have
  360. > for an educational game.  The exception library I wrote for it is even
  361. > simpler than PowerPlant's UExceptions.  You see, I too believe that for
  362. > some applications, simplicity is more important than adherence to some
  363. > external standard.
  364. > Jim Lloyd
  365. > afcjlloyd@aol.com -or- Jim_Lloyd@powertalk.apple.com
  366.  
  367. -- 
  368. Sean Parent
  369. sparent@mv.us.adobe.com
  370. "The critical driver of every successful project is its focused ruthlessness."
  371.         Grady Booch
  372.  
  373. +++++++++++++++++++++++++++
  374.  
  375. >From objfactory@aol.com (ObjFactory)
  376. Date: 1 Sep 1994 16:48:03 -0400
  377. Organization: America Online, Inc. (1-800-827-6364)
  378.  
  379. In article <sparent-3108941249220001@macb041.mv.us.adobe.com>,
  380. sparent@mv.us.adobe.com (Sean Parent) writes:
  381.  
  382. >How does BEL handle the case of an auto-destruct member within another
  383. >auto-destruct derived class? That is, how do you handle:
  384.  
  385. >class CFoo : CAutoDestruct {
  386. >   ...
  387. >}
  388. >class CBar : CAutoDestruct {
  389. >   CFoo  fooMember;
  390. >}
  391.  
  392. >void Test {
  393. >   CBar bar;
  394. >   CFoo foo;
  395. >   Failure(); // or throw
  396. >}
  397.  
  398. >You need to thread foo and bar onto your exception stack but not
  399. fooMember
  400. >(since it's destructor will get called when bar is destructed).
  401.  
  402. You seem to have answered your own question. :)
  403.  
  404. Bob Foster
  405. Object Factory
  406.  
  407. +++++++++++++++++++++++++++
  408.  
  409. >From afcjlloyd@aol.com (AFC JLloyd)
  410. Date: 1 Sep 1994 18:13:09 -0400
  411. Organization: America Online, Inc. (1-800-827-6364)
  412.  
  413. In article <345em3$a1d@search01.news.aol.com>, objfactory@aol.com
  414. (ObjFactory) writes:
  415.  
  416. >In article <sparent-3108941249220001@macb041.mv.us.adobe.com>,
  417. >sparent@mv.us.adobe.com (Sean Parent) writes:
  418. >
  419. >>How does BEL handle the case of an auto-destruct member within another
  420. >>auto-destruct derived class? That is, how do you handle:
  421. >
  422. >>class CFoo : CAutoDestruct {
  423. >>   ...
  424. >>}
  425. >>class CBar : CAutoDestruct {
  426. >>   CFoo  fooMember;
  427. >>}
  428. >
  429. >>void Test {
  430. >>   CBar bar;
  431. >>   CFoo foo;
  432. >>   Failure(); // or throw
  433. >>}
  434. >
  435. >>You need to thread foo and bar onto your exception stack but not
  436. >fooMember
  437. >>(since it's destructor will get called when bar is destructed).
  438. >
  439. >You seem to have answered your own question. :)
  440. >
  441. >Bob Foster
  442. >Object Factory
  443.  
  444. No, BEL threads all three objects on the delete stack, but Sean's
  445. assumption that the fooMember is on the top of the stack is incorrect --
  446. subobjects are constructed before their owning object.  So, the stack
  447. order at the time of failure is:
  448.  
  449. bar.fooMember; bar; foo;
  450.  
  451. BEL first calls foo.CFoo::~CFoo(), then calls bar.CBar::~CBar.  The
  452. destructor of CBar implicitly calls the destructor
  453. bar.fooMember.CFoo::~CFoo().  Inside this destructor is the
  454. START_DESTRUCTOR macro, which informs BEL to pop the deletestack entry for
  455. bar.fooMember.  When the destructor returns to BEL, the delete stack is
  456. now empty, so BEL doesn't try to delete bar.fooMember.
  457.  
  458. This strategy results in more items being placed onto the delete stack
  459. than is theoretically necessary, but less computation at runtime to
  460. determine if an entry should be pushed onto the stack or not.  We
  461. therefore have traded off a little extra storage for faster code.
  462.  
  463. Jim Lloyd - AFC JLloyd
  464.  
  465.  
  466. ---------------------------
  467.  
  468. >From nick+@pitt.edu ( nick.c )
  469. Subject: NIM on develop, as of 19
  470. Date: Wed, 31 Aug 94 14:50:26 GMT
  471. Organization: The Pitt, Chemistry
  472.  
  473.  
  474. Folks:
  475.  
  476.     Someone was asking about the new NIM policy for _develop_, and what
  477.       volumes would be on 19 that weren't on 18.  Just got 19, and noticed
  478.       the absense of the Old IM and beta QD GX books, but they added as 
  479.       "specials" Sound and Imaging with Quickdraw.  Here's a running
  480.       index of NIM I'm keeping for my own use, with 19 added.
  481.       If you have issue 17 and up you have 15 of the NIM, with 7 (beta) 
  482.       QD GX books, the Human Interface guidelines and Old IM VI.
  483.       
  484.     BTW, I saw a CD at the bookstore with the Human Interface Guidelines
  485.       and _Making it Macintosh_ on one CD for $49.  Anyone checked this
  486.       out?  There has got to be more on it that just that, but the package
  487.       wasn't very helpfull.
  488.       
  489.                                         -- nick
  490.  
  491.  
  492.  
  493. develop NIM Index:
  494. ~~~~~~~~~~~~~~~~~~
  495.  
  496. volume 17: (last "comprehensive")
  497. =================================
  498.  
  499.   NIM (presume "core")
  500.     Toolbox Essentials
  501.     More Mac Toolbox
  502.     Memory
  503.     Files
  504.   
  505.   NIM (unique this CD)
  506.     Overview
  507.     Processes
  508.     Devices (Preview)
  509.     Interapplication Comm
  510.     QuickTime
  511.     QuickTime Components
  512.     Text
  513.  
  514.   QD GX 1.0b3 <- Note beta
  515.     Environment & Utilities
  516.     Extensions & Drivers
  517.     Functin Index
  518.     Graphics
  519.     Objects
  520.     Printing
  521.     Typography
  522.     
  523.   Misc.
  524.     Human Interface Guidelines
  525.     Old IM volume VI
  526.  
  527.  
  528. volume 18: (first "reduced")
  529. ============================
  530.     
  531.   NIM (presume "core")
  532.     Toolbox Essentials
  533.     More Mac Toolbox
  534.     Memory
  535.     Files
  536.  
  537.   NIM (unique this CD)
  538.     PowerPC Numerics
  539.     PowerPC System Software
  540.  
  541.   QD GX b3 <- Note beta
  542.     Environment & Utilities
  543.     Extensions & Drivers
  544.     Functin Index
  545.     Graphics
  546.     Objects
  547.     Printing
  548.     Typography
  549.     
  550.   Misc.
  551.     Human Interface Guidelines
  552.     Old IM volume VI
  553.  
  554.  
  555. volume 19: (second "reduced")
  556. =============================
  557.     
  558.   NIM (presume "core")
  559.     Toolbox Essentials
  560.     More Mac Toolbox
  561.     Memory
  562.     Files
  563.  
  564.   NIM (unique this CD)
  565.     Imaging With Quickdraw
  566.     Sound
  567.  
  568.   Misc.
  569.     Human Interface Guidelines
  570.  
  571.  
  572. The README explanation of new NIM policy:
  573. =========================================
  574.  
  575. Why aren't all of the volumes of New Inside Macintosh on this
  576. issue of the Bookmark CD?
  577.  
  578. Later this year, Apple and Addison-Wesley will release the
  579. New Inside Macintosh (NIM) CD.  The NIM CD will offer all
  580. Inside Macintosh volumes to date in Apple DocViewer format,
  581. a complete cross reference, and numerous prebuilt DocViewer
  582. collections to allow easy querying across the information. 
  583. All of the NIM books, if purchased separately, would cost
  584. several hundred dollars. The complete electronic set,
  585. however, will be offered at the introductory price of $99
  586. (suggested retail price).
  587.  
  588. To avoid conflicts, the introduction of this product has
  589. caused us to alter our practice of providing all NIM volumes
  590. on the Bookmark CD.  Because the low subscription price for
  591. develop and the Bookmark cannot support the necessary
  592. enhancements, updates, and wider distribution of the
  593. electronic NIM product, we've had to make some concessions. 
  594. The initial plan was to simply remove all NIM content from
  595. the Bookmark CD.  We realize, however, that this content is
  596. extremely important to a great many of you and that it is
  597. necessary for your development projects.  
  598.  
  599. So, we've compromised a bit - beginning with this CD, the
  600. Bookmark will include a core set of NIM volumes. 
  601. Additionally, each issue of the Bookmark CD will feature
  602. other volumes of NIM.  The core set will stay fairly
  603. consistent, but the featured volumes will change on each
  604. subsequent issue of the Bookmark CD. 
  605.  
  606. While this solution may not be optimal for all develop
  607. subscribers, it was a compromise that was necessary to make.
  608.  We hope, of course, that you feel that develop and the
  609. other content on the Bookmark CD is well worth the low
  610. subscription price.
  611.  
  612. Sincerely,
  613. The develop and Bookmark CD team
  614.  
  615. - -
  616.  
  617.  
  618.  
  619.                                     _/   _/  _/  _/_/_/   _/   _/  
  620.      Interet: nick@pitt.edu        _/_/ _/  _/  _/   _/  _/_/_/    
  621.       eWorld: nick                _/ _/_/  _/  _/       _/ _/      
  622.          CIS: 71232,766          _/   _/  _/   _/_/_/  _/   _/     
  623.  
  624.  
  625. +++++++++++++++++++++++++++
  626.  
  627. >From nick+@pitt.edu ( nick.c )
  628. Date: Wed, 31 Aug 94 15:15:54 GMT
  629. Organization: The Pitt, Chemistry
  630.  
  631.  
  632.     
  633.     This might be more usefull.
  634.  
  635.                         -- nick
  636.  
  637. - -
  638.  
  639.  
  640. develop NIM Index:
  641. ~~~~~~~~~~~~~~~~~~
  642.  
  643.     NIM: Toolbox Essentials             ANY develop (17up)
  644.     NIM: More Mac Toolbox               ANY develop (17up)
  645.     NIM: Memory                         ANY develop (17up)
  646.     NIM: Files                          ANY develop (17up)
  647.     
  648.     NIM: Overview                       17  develop
  649.     NIM: Processes                      17  develop
  650.     NIM: Devices (Preview)              17  develop
  651.     NIM: Interapplication Comm          17  develop
  652.     NIM: QuickTime                      17  develop
  653.     NIM: QuickTime Components           17  develop
  654.     NIM: Text                           17  develop
  655.     
  656.     NIM: Imaging With Quickdraw         19  develop
  657.     NIM: Sound                          19  develop
  658.     
  659.     NIM: PowerPC Numerics               18  develop
  660.     NIM: PowerPC System Software        18  develop ___ 15 volumes
  661.     
  662.     NIM: QD/GX Environment & Utilities  17 or 18 develop
  663.     NIM: QD/GX Extensions & Drivers     17 or 18 develop
  664.     NIM: QD/GX Functin Index            17 or 18 develop
  665.     NIM: QD/GX Graphics                 17 or 18 develop
  666.     NIM: QD/GX Objects                  17 or 18 develop
  667.     NIM: QD/GX Printing                 17 or 18 develop
  668.     NIM: QD/GX Typography               17 or 18 develop ___ 7 volumes
  669.     
  670.     Human Interface Guidelines          ANY develop (17up)
  671.     Old IM volume VI                    17 or 18 develop
  672.     
  673.  
  674.  
  675.                                     _/   _/  _/  _/_/_/   _/   _/  
  676.      Interet: nick@pitt.edu        _/_/ _/  _/  _/   _/  _/_/_/    
  677.       eWorld: nick                _/ _/_/  _/  _/       _/ _/      
  678.          CIS: 71232,766          _/   _/  _/   _/_/_/  _/   _/     
  679.  
  680.  
  681. ---------------------------
  682.  
  683. >From jflet@dir.mcc.ac.uk (J. Fletcher)
  684. Subject: Need to Stop flashing Desktop when changing palletes
  685. Date: Tue, 30 Aug 1994 18:28:53 GMT
  686. Organization: University of Manchester, UK
  687.  
  688.  
  689. I'm writing a small database application which displays 256 colour
  690. picts in a window. As I swap in different pictures, I set a new
  691. optimised pallette to get the best colour scheme possible.
  692.  
  693. The problem is that every time a set a new palatte, everything 
  694. flashes all over the place, scroll bars, desktop pattern etc.
  695.  
  696. What steps can I use to minimise these visual irritations?
  697.  
  698. I've got some ideas but does Anybody have any ideas on how to
  699. implement the following :-
  700.  
  701. 1) Get the Desktop pattern, save it, Set it to a black/white
  702. checkerboard 'grey' ands restore at app. quit time.
  703.  
  704. 2) Force all screen windows to display their window bar/controls
  705. in neat black/white (like setting to black/white only in monitors
  706. CP) yet allowing colour drawing.
  707.  
  708. Julian
  709. jflet@dir.mcc.ac.uk
  710.  
  711. +++++++++++++++++++++++++++
  712.  
  713. >From radixinc@aol.com (RadixInc)
  714. Date: 30 Aug 1994 18:34:01 -0400
  715. Organization: America Online, Inc. (1-800-827-6364)
  716.  
  717. In article <jflet-300894192149@grice.ch.man.ac.uk>, jflet@dir.mcc.ac.uk
  718. (J. Fletcher) writes:
  719.  
  720. <<The problem is that every time a set a new palatte, everything 
  721. flashes all over the place, scroll bars, desktop pattern etc.
  722.  
  723. What steps can I use to minimise these visual irritations?
  724.  
  725. I've got some ideas but does Anybody have any ideas on how to
  726. implement the following :-
  727.  
  728. 1) Get the Desktop pattern, save it, Set it to a black/white
  729. checkerboard 'grey' ands restore at app. quit time.
  730.  
  731. 2) Force all screen windows to display their window bar/controls
  732. in neat black/white (like setting to black/white only in monitors
  733. CP) yet allowing colour drawing.>>
  734.  
  735. The problem is inherent in the way the Pallette Manager and color devices
  736. work. The video card for each device has a table with and RGB entry for
  737. each color entry--there are 256 of them on an 8-bit card. When you change
  738. pallettes the Pallette Manager tries to keep everything in order, but if
  739. there aren't enough available (unused) colors in the color table it has to
  740. remap some colors, and that's when you get the flash and weird colors.
  741.  
  742. Both of the solutions you propose are, in my opinion, worse than the
  743. problem. You would be making changes that affect other programs, and there
  744. is no way to tell what that will do to them. Fiddling with the desktop
  745. pattern is not a good idea; that should be under the user's control. And
  746. how would you force other apps to get only B&W controls without installing
  747. a patch at startup time? Also what will you do when your app is switched
  748. out--flip everything back? That will cause more flashing than the pallette
  749. problem.
  750.  
  751. If you can't use the System Pallette, you'll have to live with the colors
  752. flashing.
  753.  
  754. Gregory Jorgensen
  755. Radix Consulting Inc.
  756.  
  757. +++++++++++++++++++++++++++
  758.  
  759. >From hanrek@cts.com (Mark Hanrek)
  760. Date: 31 Aug 1994 09:19:24 GMT
  761. Organization: The Information Workshop
  762.  
  763. > In article <jflet-300894192149@grice.ch.man.ac.uk>, jflet@dir.mcc.ac.uk
  764. > (J. Fletcher) writes:
  765. > <<The problem is that every time a set a new palatte, everything 
  766. > flashes all over the place, scroll bars, desktop pattern etc.
  767.  
  768. The problem is that we've forgotten that "the flash" is the tradeoff we
  769. had accepted for the benefit of being able to use custom color tables,
  770. which usually yield stunning color accuracy and realism for a 256-color
  771. system.
  772.  
  773. There are "ways" to minimize the effects.
  774.  
  775. * Use a gamma fader to fade down the monitor between pictures to hide the flash.
  776.  
  777. * Utilize a "backdrop window" with a gray pattern (alternate black and
  778. white pixels) to hide the desktop and other application's windows, since
  779. black and white are always in every custom color table, and will not
  780. flash.
  781.  
  782. * Use a black backdrop which is traditional with the "slide show" options
  783. of most graphics applications.
  784.  
  785. * Always make sure the display window is full screen.
  786.  
  787. * Always create greedy palettes with all hte entries always set to
  788. pmTolerant + pmExplicity and a tolerance of zero, so that all other
  789. applications and the Finder are forced to black and white mode.
  790.  
  791. Hopefully one of these suggestions will help.
  792.  
  793. There are only 256 colors available in the hardware, and that's it.
  794.  
  795.  
  796. Mark Hanrek
  797.  
  798. +++++++++++++++++++++++++++
  799.  
  800. >From carlf2@aol.com (CarlF2)
  801. Date: 31 Aug 1994 09:45:08 -0400
  802. Organization: America Online, Inc. (1-800-827-6364)
  803.  
  804. In article <jflet-300894192149@grice.ch.man.ac.uk>, jflet@dir.mcc.ac.uk
  805. (J. Fletcher) writes:
  806.  
  807. >I'm writing a small database application which displays 256 colour
  808. >picts in a window. As I swap in different pictures, I set a new
  809. >optimised pallette to get the best colour scheme possible.
  810.  
  811. >The problem is that every time a set a new palatte, everything 
  812. >flashes all over the place, scroll bars, desktop pattern etc.
  813.  
  814. >......[deleted]
  815.  
  816. Try using a single animated palette for your application, with every entry
  817. but black and white reserved for your application. (This will force the
  818. background applications to use B&W; if you can, you might leave some other
  819. entries for them to use as well.) Then when you want to change your
  820. colors, use AnimatePalette. Since no other application is using those
  821. entries, no flash will occur.
  822.  
  823. Carl Fristrom
  824. Medfield MA
  825.  
  826. ---------------------------
  827.  
  828. >From sbill@informix.com (Bill Stackhouse)
  829. Subject: PPostEvent mouse events
  830. Date: 26 Aug 1994 20:25:24 GMT
  831. Organization: Informix Software, Inc.
  832.  
  833. I am trying to post mouseUp and mouseDown events to my application
  834. using PPostEvent. After call PPostEvent, the what field is set to
  835. -1. The return value is 0. If I scan the event queue, there are
  836. no events. Even though I set the mouse position using low mem
  837. globals before the post, the where field has a different value
  838. than where the mouse is.
  839.  
  840. What does it take to post mouse events?
  841.  
  842. Thanks
  843. Bill
  844.  
  845. +++++++++++++++++++++++++++
  846.  
  847. >From pbonner@pbcomputing.com (Pace Bonner)
  848. Date: 29 Aug 1994 18:01:19 GMT
  849. Organization: PB Computing
  850.  
  851. In article <33lj3k$k08@infmx.informix.com>, sbill@informix.com (Bill
  852. Stackhouse) wrote:
  853.  
  854. > I am trying to post mouseUp and mouseDown events to my application
  855. > using PPostEvent. After call PPostEvent, the what field is set to
  856. > -1. The return value is 0. If I scan the event queue, there are
  857. > no events. Even though I set the mouse position using low mem
  858. > globals before the post, the where field has a different value
  859. > than where the mouse is.
  860. > What does it take to post mouse events?
  861.  
  862. Try this code....It works for me.
  863.  
  864.         /* do a mouse down with correct cmd keys */
  865. void MakeMouse(where,Mods)
  866. Point             where;
  867. short             Mods;
  868. {
  869.     EvQEl            *MyEventPtr;
  870.     OsErr            err;
  871.  
  872.     err = PPostEvent(mouseDown, 0, &MyEventPtr);
  873.     MyEventPtr->evtQWhere.h = where.h;
  874.     MyEventPtr->evtQWhere.v = where.v;
  875.     MyEventPtr->evtQModifiers = Mods;
  876.     
  877.     err = PPostEvent(mouseUp, 0, &MyEventPtr);
  878.     MyEventPtr->evtQWhere.h = where.h;
  879.     MyEventPtr->evtQWhere.v = where.v;
  880.     MyEventPtr->evtQModifiers = Mods;
  881.     
  882. }
  883.  
  884. +------------------------------------------------------------------------+
  885. Pace Bonner                Macintosh & Newton        512.335.1033
  886. PB Computing              Software Development       11100 Spear Oak Cove
  887. pbonner@pbcomputing.com         Services             Austin, TX 78759-7004
  888. +------------------------------------------------------------------------+
  889.  
  890. +++++++++++++++++++++++++++
  891.  
  892. >From rollin@newton.apple.com (Keith Rollin)
  893. Date: Thu, 01 Sep 1994 19:42:04 -0800
  894. Organization: Apple ][ -> Mac -> Taligent -> Newton -> Windows?
  895.  
  896. In article <33lj3k$k08@infmx.informix.com>, sbill@informix.com (Bill
  897. Stackhouse) wrote:
  898.  
  899. >I am trying to post mouseUp and mouseDown events to my application
  900. >using PPostEvent. After call PPostEvent, the what field is set to
  901. >-1. The return value is 0. If I scan the event queue, there are
  902. >no events. Even though I set the mouse position using low mem
  903. >globals before the post, the where field has a different value
  904. >than where the mouse is.
  905. >
  906. >What does it take to post mouse events?
  907.  
  908. This is the way I did it for Macintosh Programming Secrets:
  909.  
  910.                 PPostEvent(mouseDown, 0, &qElPtr);
  911.                 qElPtr->evtQWhere = location;
  912.                 PPostEvent(mouseUp, 0, &qElPtr);
  913.                 qElPtr->evtQWhere = location;
  914.  
  915. This code has always worked for me so far. I don't know if there are any
  916. A/UX issues.
  917.  
  918. - --------------------------------------------------------------------------
  919. Keith Rollin --- Phantom Programmer --- Apple Computer, Inc. --- Team Newton
  920.  
  921. ---------------------------
  922.  
  923. >From U086753@adpdp2.lanl.gov (Jeff Dunning)
  924. Subject: Sample MacTcp Programs
  925. Date: Wed, 31 Aug 94 18:49:44 GMT
  926. Organization: Los Alamos National lab.
  927.  
  928. I am looking for a couple of sample MacTcp programs. Where might some be found.
  929.  
  930. Thanks. 
  931. jsd@lanl.gov
  932. Jeff Dunning
  933. Los Alamos National Laboratory
  934. (505)667-8418
  935.  
  936. +++++++++++++++++++++++++++
  937.  
  938. >From hanrek@cts.com (Mark Hanrek)
  939. Date: 31 Aug 1994 20:52:10 GMT
  940. Organization: The Information Workshop
  941.  
  942. In article <U086753.1128746624A@newshost.lanl.gov>, jsd@lanl.gov wrote:
  943.  
  944. > I am looking for a couple of sample MacTcp programs. 
  945. > Where might some be found?
  946.  
  947.  
  948. Jeff,
  949.  
  950. Here are some leads to resources...
  951.  
  952.  
  953.   * Snippets/network section of Developer CD
  954.  
  955.   * Snippets section of ftp://ftp.apple.com/
  956.  
  957.   * ftp://seeding.apple.com/mactcp/MacTCP_Dev_Kit
  958.  
  959.   * articles in "develop" magazine ftp://ftp.apple.com
  960.  
  961.   * source code archives everywhere
  962.       ( start at nic.switch.ch )
  963.  
  964.  
  965. This should help. :)
  966.  
  967. Mark Hanrek
  968.  
  969. +++++++++++++++++++++++++++
  970.  
  971. >From resnick@uiuc.edu (Pete Resnick)
  972. Date: Wed, 31 Aug 1994 18:16:38 -0500
  973. Organization: University of Illinois at Urbana-Champaign
  974.  
  975. In article <hanrek-3108941354220001@auke.cts.com>, hanrek@cts.com (Mark
  976. Hanrek) wrote:
  977.  
  978. >In article <U086753.1128746624A@newshost.lanl.gov>, jsd@lanl.gov wrote:
  979. >
  980. >> I am looking for a couple of sample MacTcp programs. 
  981. >> Where might some be found?
  982. >
  983. >Here are some leads to resources...
  984. >
  985. >  * Snippets/network section of Developer CD
  986. >
  987. >  * Snippets section of ftp://ftp.apple.com/
  988.  
  989. Eeeek!!! No, don't use those as examples. They're horribly written,
  990. useless pieces of code. They do synchronous I/O that will hang your
  991. machine. Just say no!
  992.  
  993. >  * ftp://seeding.apple.com/mactcp/MacTCP_Dev_Kit
  994.  
  995. I don't believe there is any code in there.
  996.  
  997. >  * articles in "develop" magazine ftp://ftp.apple.com
  998.  
  999. Don't look at the articles by Steve Falkenburg. Same warning as above on
  1000. Snippets.
  1001.  
  1002. >  * source code archives everywhere
  1003. >      ( start at nic.switch.ch )
  1004.  
  1005. Also look at the NewsWatcher source code--
  1006.  
  1007. ftp://ftp.acns.nwu.edu//pub/newswatcher/source-20b9.sea.hqx
  1008.  
  1009. And some of Peter Lewis's stuff (which should be lots of places).
  1010.  
  1011. pr
  1012. -- 
  1013. Pete Resnick        (...so what is a mojo, and why would one be rising?)
  1014. Doctoral Student - Philosophy Department, Gregory Hall, UIUC
  1015. System manager - Cognitive Science Group, Beckman Institute, UIUC
  1016. Internet: resnick@uiuc.edu
  1017.  
  1018. ---------------------------
  1019.  
  1020. >From jbeeghly@u.washington.edu (Jeff Beeghly)
  1021. Subject: Selecting Window via menus
  1022. Date: 31 Aug 1994 17:37:50 GMT
  1023. Organization: University of Washington
  1024.  
  1025.  
  1026. I'm creating an app that will contain multiple windows that are 
  1027. dynamically created and destroyed.  I was keeping track of each window 
  1028. and it's data via a linked-list, but some friends of mine said that the 
  1029. "Mac way of handling multiple child windows is to use window reference 
  1030. values".
  1031.  
  1032.  
  1033. So I converted my app from using linked-lists to using window references 
  1034. (not an easy task, mind you) and I'm finding out that this method has 
  1035. several setbacks compared to my original method, one of which is bringing 
  1036. a window to the front via menus.
  1037.  
  1038. I was digging through THINK Reference and I found out that a Window 
  1039. Record contains a pointer to the next window.  Well, I implemented a test 
  1040. into my program that displays the title of each child window:
  1041.  
  1042. i = 0;
  1043. whichWindow = FrontWindow();
  1044. while( whichWindow )
  1045. {
  1046.     GetWTitle(whichWindow, title);
  1047.     MoveTo(4, 10 + i);
  1048.     DrawString(title);
  1049.     whichWindow = (WindowPtr )(((WindowPeek )whichWindow)->nextWindow);
  1050.     i += 20;
  1051. }
  1052.  
  1053. I'm comming across 2 problems with this:
  1054. 1) In my app, if I create 4 new windows, then invoke this operation, only 
  1055. the top window's (window #4) title is displayed.  However, if I click on 
  1056. one of the other windows (causing the window to be moved to the front), 
  1057. then invoke this function, all four titles appear.  Thus, if I was to use 
  1058. this implementation of getting a list of windows, it wouldn't be valid 
  1059. until one of the windows was topped.
  1060.  
  1061. 2) Even when the items are displayed, they aren't displayed in the order 
  1062. in which they were created.  In other words, if I create 4 new windows, 
  1063. then select window #1 to come up, I would expect to see the titles of 
  1064. win1, win2, win3, win4 displayed.  Instead, I get win1, win4, win3, win2.  
  1065. I've tested this out a bit more, and it seems that the nextWindow points 
  1066. to the window underneath the current window, not the window that was created 
  1067. after the current window.
  1068.  
  1069. This makes sense, but it doesn't help me out.  What I was going to do was 
  1070. have a counter.  If menu item #2 was selected, then that must mean that 
  1071. the second window needs to be topped.  I would then imcrement the window 
  1072. pointer to the second created window and select it.  Obviously this will 
  1073. not work.
  1074.  
  1075. So right now I'm thinking about creating an array holding the window pointers
  1076. and it would look something like this:
  1077.  
  1078. menuItem = 2;  // The third window needs to be topped
  1079.  
  1080. winPtr = ourArray[ menuItem ];
  1081.  
  1082. SelectWindow( winPtr );
  1083.  
  1084.  
  1085. I was wondering: Is there an easier (and more standardised) way of doing 
  1086. this?  Are there any code examples of this floating around?
  1087.  
  1088.  
  1089. P.S.  I have thought about comparing the string in the menu item with the 
  1090. title of the window.  The problem is this:  What do you do if you have 
  1091. two windows with the same title?  Suppose you have two files from two 
  1092. different folders opened with the same name?  I know that some apps add a 
  1093. number at the end of the name (MyDoc:1 vs MyDoc:2), but personally, I 
  1094. don't like doing that.
  1095.  
  1096.  
  1097. +++++++++++++++++++++++++++
  1098.  
  1099. >From bb@lightside.com (Bob Bradley)
  1100. Date: Tue, 30 Aug 1994 02:03:58 -0800
  1101. Organization: SS Software Inc.
  1102.  
  1103. In article <342f5e$2mf@news.u.washington.edu>, jbeeghly@u.washington.edu
  1104. (Jeff Beeghly) wrote:
  1105.  
  1106. > I was digging through THINK Reference and I found out that a Window 
  1107. > Record contains a pointer to the next window.  Well, I implemented a test 
  1108. > into my program that displays the title of each child window:
  1109. > i = 0;
  1110. > whichWindow = FrontWindow();
  1111. > while( whichWindow )
  1112. > {
  1113. >         GetWTitle(whichWindow, title);
  1114. >         MoveTo(4, 10 + i);
  1115. >         DrawString(title);
  1116. >         whichWindow = (WindowPtr )(((WindowPeek )whichWindow)->nextWindow);
  1117. >         i += 20;
  1118. > }
  1119. > I'm comming across 2 problems with this:
  1120. > 1) In my app, if I create 4 new windows, then invoke this operation, only 
  1121. > the top window's (window #4) title is displayed.  However, if I click on 
  1122. > one of the other windows (causing the window to be moved to the front), 
  1123. > then invoke this function, all four titles appear.  Thus, if I was to use 
  1124. > this implementation of getting a list of windows, it wouldn't be valid 
  1125. > until one of the windows was topped.
  1126.  
  1127. One probably you may be having is you may be drawing in a part of the
  1128. window that isn't visible so it's not showing up. Accessing the nextWindow
  1129. field of the WindowRecord doesn't select the window. Try moving your
  1130. windows apart so you know the part you are trying to draw into is visible
  1131. (normally you would always do any drawing from your updateEvt handler.).
  1132.  
  1133. > 2) Even when the items are displayed, they aren't displayed in the order 
  1134. > in which they were created.  In other words, if I create 4 new windows, 
  1135. > then select window #1 to come up, I would expect to see the titles of 
  1136. > win1, win2, win3, win4 displayed.  Instead, I get win1, win4, win3, win2.  
  1137. > I've tested this out a bit more, and it seems that the nextWindow points 
  1138. > to the window underneath the current window, not the window that was created 
  1139. > after the current window.
  1140.  
  1141. You are correct, nextWindow points to the window beneath the current
  1142. window. You can use this to step down thru your windows one beneath the
  1143. other.
  1144.  
  1145. > This makes sense, but it doesn't help me out.  What I was going to do was 
  1146. > have a counter.  If menu item #2 was selected, then that must mean that 
  1147. > the second window needs to be topped.  I would then imcrement the window 
  1148. > pointer to the second created window and select it.  Obviously this will 
  1149. > not work.
  1150.  
  1151. There is an example of keeping track of windows in a menu in the book Mac
  1152. Programming Secrets (Keith Rollin and Scott Knaster) and the source is
  1153. available almost everyway (usually named MPS 1.0.1). They keep track of
  1154. the order which the windows were created and access the windows via menus
  1155. in the same manner.
  1156.  
  1157. Another way you could do it is to attach some private data to the window
  1158. that contains a variable to keep track of which menuItem # the window goes
  1159. with, then write a simple routine to step thru the window list (using
  1160. nextWindow) checking each window's private data for the menuItem # you're
  1161. trying to find.
  1162.  
  1163. +++++++++++++++++++++++++++
  1164.  
  1165. >From Matt Slot <fprefect@engin.umich.edu>
  1166. Date: 1 Sep 1994 01:43:11 GMT
  1167. Organization: University of Michigan
  1168.  
  1169. Jeff Beeghly, jbeeghly@u.washington.edu writes:
  1170.  > I was wondering: Is there an easier (and more standardised) way of doing 
  1171.  > this?  Are there any code examples of this floating around?
  1172.  
  1173. - ---------
  1174.  
  1175. I have just written such a beast. Here is some sample code that handles
  1176. a windows menu. The default menu looks like this...
  1177.  
  1178.     Windows
  1179.     --------------------
  1180.     Show/Hide Floater #1
  1181.     Show/Hide Floater #2
  1182.  
  1183. And I add a separator when I put any document windows underneath.
  1184. Basically, I keep a Mac Queue of window information, that is ordered by
  1185. window creation. As I make, destroy, or rename a window, I make the
  1186. appropriate call and I am magically taken care of. I map the index of the
  1187. menu item into the element of the queue.
  1188.     
  1189. Share and enjoy
  1190.  
  1191. Matt
  1192.     
  1193. // * **************************************************************************** * //
  1194. // * **************************************************************************** * //
  1195. // Menu Item numbers
  1196.  
  1197. #define    kWindowsFloater1        1
  1198. #define    kWindowsFloater2        2
  1199. #define    kWindowsSeparator1        3
  1200.  
  1201. // * **************************************************************************** * //
  1202.  
  1203. typedef struct WindowQElem {
  1204.     struct WindowQElem qLink;
  1205.     short qType;
  1206.     WindowPtr win;
  1207.     } WindowQElem, *WindowQElemPtr;
  1208.         
  1209. // * **************************************************************************** * //
  1210.  
  1211. QHdr gDocsOpen;
  1212.  
  1213. // * **************************************************************************** * //
  1214.  
  1215. void AddToWindowsMenu(WindowPtr win) {
  1216.     Str255 textBuff;
  1217.     MenuHandle theMenu;
  1218.     WindowQElemPtr wQPtr;
  1219.     
  1220.     theMenu = GetMenu(kWindowsMenuID);
  1221.     if (CountMItems(theMenu) < kWindowsSeparator1)
  1222.         InsMenuItem(theMenu, "\p-", kWindowsSeparator1);
  1223.     
  1224.     if (wQPtr = (WindowQElemPtr) NewPtrClear(sizeof(*wQPtr))) {
  1225.         
  1226.         wQPtr->win = win;
  1227.         Enqueue((QElemPtr) wQPtr, &gDocsOpen);
  1228.  
  1229.         AppendMenu(theMenu, "\p ");
  1230.         GetWTitle(win, textBuff);
  1231.         SetItem(theMenu, CountMItems(theMenu), textBuff);
  1232.         
  1233.         DrawMenuBar();
  1234.         }
  1235.     }
  1236.  
  1237. // * **************************************************************************** * //
  1238. // * **************************************************************************** * //
  1239.  
  1240. void ModifyFromWindowsMenu(WindowPtr win) {
  1241.     short i;
  1242.     Str255 textBuff;
  1243.     MenuHandle theMenu;
  1244.     WindowQElemPtr wQPtr;
  1245.     
  1246.     theMenu = GetMenu(kWindowsMenuID);
  1247.     
  1248.     for(wQPtr = (WindowQElemPtr) gDocsOpen.qHead, i=0; wQPtr;
  1249.             wQPtr = wQPtr->next, i++)
  1250.         if (wQPtr->win == win) {
  1251.             GetWTitle(win, textBuff);
  1252.             SetItem(theMenu, kWindowsFirstWinItem + i, textBuff);
  1253.             DrawMenuBar();
  1254.  
  1255.             return;
  1256.             }
  1257.  
  1258.     }
  1259.  
  1260. // * **************************************************************************** * //
  1261. // * **************************************************************************** * //
  1262.  
  1263. void RemoveFromWindowsMenu(WindowPtr win) {
  1264.     short i;
  1265.     Str255 textBuff;
  1266.     MenuHandle theMenu;
  1267.     WindowQElemPtr wQPtr;
  1268.     
  1269.     theMenu = GetMenu(kWindowsMenuID);
  1270.     
  1271.     for(wQPtr = (WindowQElemPtr) gDocsOpen.qHead, i=0; wQPtr;
  1272.             wQPtr = wQPtr->next, i++)
  1273.         if ((wQPtr->win == win) && ! Dequeue((QElemPtr) wQPtr, &gDocsOpen)) {
  1274.             DelMenuItem(theMenu, kWindowsFirstWinItem + i);
  1275.             if (CountMItems(theMenu) == kWindowsSeparator1)
  1276.                 DelMenuItem(theMenu, kWindowsSeparator1);
  1277.             DrawMenuBar();
  1278.  
  1279.             return;
  1280.             }
  1281.     }
  1282.  
  1283. +++++++++++++++++++++++++++
  1284.  
  1285. >From h+@nada.kth.se (Jon W{tte)
  1286. Date: Thu, 01 Sep 1994 14:55:32 +0200
  1287. Organization: Royal Institute of Something or other
  1288.  
  1289. In article <342f5e$2mf@news.u.washington.edu>,
  1290. jbeeghly@u.washington.edu (Jeff Beeghly) wrote:
  1291.  
  1292. >whichWindow = FrontWindow();
  1293. >while( whichWindow )
  1294. >{
  1295. >    GetWTitle(whichWindow, title);
  1296. >    MoveTo(4, 10 + i);
  1297. >    DrawString(title);
  1298. >    whichWindow = (WindowPtr )(((WindowPeek )whichWindow)->nextWindow);
  1299. >    i += 20;
  1300. >}
  1301.  
  1302. This looks quite allright.
  1303.  
  1304. >1) In my app, if I create 4 new windows, then invoke this operation, only 
  1305. >the top window's (window #4) title is displayed.  However, if I click on 
  1306. >one of the other windows (causing the window to be moved to the front), 
  1307. >then invoke this function, all four titles appear.  Thus, if I was to use 
  1308.  
  1309. This is strange. You're probably doing something wrong in 
  1310. creating and showing the windows. Or maybe you're now showing 
  1311. the windows? FrontWindow() returns the frontmost VISIBLE 
  1312. window. If you want to get the list of ALL windows, you have to 
  1313. use LMGetWindowList() and walk from there.
  1314.  
  1315. >2) Even when the items are displayed, they aren't displayed in the order 
  1316. >in which they were created.  In other words, if I create 4 new windows, 
  1317. >then select window #1 to come up, I would expect to see the titles of 
  1318. >win1, win2, win3, win4 displayed.  Instead, I get win1, win4, win3, win2.  
  1319.  
  1320. Yes; the titles come up in the order they lie in the layers. If 
  1321. you create each new window on top of the preceeding window, 
  1322. it'll be before it in the list.
  1323.  
  1324. Cheers,
  1325.  
  1326.                 / h+
  1327.  
  1328.  
  1329. --
  1330.   Jon Wätte (h+@nada.kth.se), Hagagatan 1, 113 48 Stockholm, Sweden
  1331.  
  1332.   Reality exists only in your imagination.
  1333.  
  1334.  
  1335. ---------------------------
  1336.  
  1337. >From phixus@netcom.com (Chris DeSalvo)
  1338. Subject: SetDialogDefaultItem real?
  1339. Date: Wed, 17 Aug 1994 08:28:47 GMT
  1340. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  1341.  
  1342. Think Reference mentions two traps:
  1343.  
  1344. SetDialogDefaultItem and
  1345. SetDialogCancelItem
  1346.  
  1347. They are supposed to take care of button hiliting, outlining, and
  1348. keyboard mapping of things like return/enter and escape.
  1349.  
  1350. The traps are definied in the Universal Headers but they don't seem to
  1351. work.  They are not documented in the Dialog Manager section of
  1352. NIM:Toolbox Essentials.
  1353.  
  1354. Are these entries just place holders or is there some magic I have not
  1355. learned to get them to work?
  1356.  
  1357.  
  1358. Thanx
  1359. Chris
  1360. -- 
  1361. +-----------------------------------------------------------------+
  1362. | phixus@netcom.com           |   Macintosh:  Changing the world, |
  1363. | Chris De Salvo              |        one person at a time!      |
  1364. | Professional Mac Geek       |    -----------------------------  |
  1365. | for MacPlay, Inc.           |      (I wish they'd hurry up!)    |
  1366. +-----------------------------------------------------------------+
  1367.  
  1368. Any opinions expressed, or implied, are my own!  They should not be
  1369. considered representative of the opinions or policies of my employer,
  1370. MacPlay, a division of Interplay Productions, Inc.
  1371.  
  1372. +++++++++++++++++++++++++++
  1373.  
  1374. >From spencerl@crl.com (Spencer Low)
  1375. Date: Wed, 17 Aug 1994 12:24:56 -0800
  1376. Organization: LowTek Creations
  1377.  
  1378. In article <phixusCuo7K0.Fzr@netcom.com>, phixus@netcom.com (Chris DeSalvo)
  1379. wrote:
  1380. > The traps are definied in the Universal Headers but they don't seem to
  1381. > work.  They are not documented in the Dialog Manager section of
  1382. > NIM:Toolbox Essentials.
  1383.  
  1384. Make sure that you don't have an extension that messes with ModalDialog
  1385. filter procs - I was running the cool Escapade, but it seemed to stop this
  1386. "default" behavior.
  1387.  
  1388. If you have your own custom filter proc, make sure it calls the Standard
  1389. proc with GetStdFilterProc().
  1390.  
  1391. Spencer (please correct me if I'm wrong..)
  1392.  
  1393. +++++++++++++++++++++++++++
  1394.  
  1395. >From phixus@netcom.com (Chris DeSalvo)
  1396. Date: Thu, 18 Aug 1994 11:03:40 GMT
  1397. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  1398.  
  1399. Spencer Low (spencerl@crl.com) wrote:
  1400. : In article <phixusCuo7K0.Fzr@netcom.com>, phixus@netcom.com (Chris DeSalvo)
  1401. : wrote:
  1402. : > The traps are definied in the Universal Headers but they don't seem to
  1403. : > work.  They are not documented in the Dialog Manager section of
  1404. : > NIM:Toolbox Essentials.
  1405.  
  1406. : If you have your own custom filter proc, make sure it calls the Standard
  1407. : proc with GetStdFilterProc().
  1408.  
  1409. That is probably the case, I do indeed have a custom event filter on
  1410. this dialog.  I will check it out.
  1411.  
  1412. Thanx
  1413. Chris
  1414. -- 
  1415. +-----------------------------------------------------------------+
  1416. | phixus@netcom.com           |   Macintosh:  Changing the world, |
  1417. | Chris De Salvo              |        one person at a time!      |
  1418. | Professional Mac Geek       |    -----------------------------  |
  1419. | for MacPlay, Inc.           |      (I wish they'd hurry up!)    |
  1420. +-----------------------------------------------------------------+
  1421.  
  1422. Any opinions expressed, or implied, are my own!  They should not be
  1423. considered representative of the opinions or policies of my employer,
  1424. MacPlay, a division of Interplay Productions, Inc.
  1425.  
  1426. +++++++++++++++++++++++++++
  1427.  
  1428. >From Chris Anthes <chrisa@dsea.com>
  1429. Date: Thu, 18 Aug 1994 17:25:43 GMT
  1430. Organization: DSEA
  1431.  
  1432. In article <phixusCuq9E4.8tG@netcom.com> Chris DeSalvo, phixus@netcom.com
  1433. writes:
  1434. >: If you have your own custom filter proc, make sure it calls the Standard
  1435. >: proc with GetStdFilterProc().
  1436. >
  1437. >That is probably the case, I do indeed have a custom event filter on
  1438. >this dialog.  I will check it out.
  1439.  
  1440. Even if you are using a custom dialog filter, you can still use
  1441. SetDialogDefaultItem, SetDialogCancelItem, and SetDialogTrackCursor. 
  1442. After you are done processing whatever you need to in your filter, make a
  1443. call to the Standard Dialog Filter.  This is all explained in detail in
  1444. Mac Tech Note #304.  Here is the code I use to handle custom dialog
  1445. filters.  This code differs slightly because I use returnVal to determine
  1446. whether or not I need to call the standard dialog routines.  I did this I
  1447. think because I needed to filter Return & Enter and alias them to Tab when
  1448. all of the data in my dialog wasn't entered (e.g. OK button grayed out).
  1449.  
  1450. /***** myDialogFilter *****/
  1451.  
  1452. pascal Boolean    myDialogFilter( DialogPtr theDialog, EventRecord
  1453.         *theDialogEvent, short *theDialogItem )
  1454. {
  1455.     ModalFilterProcPtr        standardProc;
  1456.     Boolean                    returnVal = false;
  1457.     WindowPtr                temp;
  1458.  
  1459.     //
  1460.     // Do all of your filter processing here...
  1461.     //
  1462.  
  1463.     // Go to the standard dialog filter if the event wasn't completely
  1464.     // handled
  1465.     if ( returnVal != true ) {
  1466.         GetPort( &temp );
  1467.         SetPort( theDialog );
  1468.         GetStdFilterProc( &standardProc );
  1469.         returnVal = ((ModalFilterProcPtr)standardProc)( theDialog,
  1470.             theDialogEvent, theDialogItem );
  1471.         SetPort( temp );
  1472.     }
  1473.     
  1474.     return( returnVal );
  1475. }
  1476.  
  1477. If you need some more info on this, send me an email.
  1478.  
  1479. Cya L8r,
  1480.  
  1481. Chris
  1482.  
  1483. ***************************************************************************
  1484. *                             *                                           *
  1485. *  It's not the crime,        *  Chris Anthes          (chrisa@dsea.com)  *
  1486. *  It's not the thought,      *  ---------------------------------------  *
  1487. *  It's not the deed,         *  DAINIPPON SCREEN ENGINEERING OF AMERICA  *
  1488. *                             *  3700 West Segerstrom Avenue              *
  1489. *  IT'S IF YOU GET CAUGHT!!!  *  Santa Ana, CA 92704                      *
  1490. *                             *                                           *
  1491. ***************************************************************************
  1492.  
  1493. +++++++++++++++++++++++++++
  1494.  
  1495. >From b-clark@nwu.edu (Brian Clark)
  1496. Date: Wed, 17 Aug 1994 11:00:34 -0500
  1497. Organization: Northwestern University
  1498.  
  1499. In article <phixusCuo7K0.Fzr@netcom.com>, phixus@netcom.com (Chris
  1500. DeSalvo) wrote:
  1501.  
  1502. > Think Reference mentions two traps:
  1503. > SetDialogDefaultItem and
  1504. > SetDialogCancelItem
  1505. > Are these entries just place holders or is there some magic I have not
  1506. > learned to get them to work?
  1507.  
  1508. They work fine, but only when the standard system dialog filter proc is
  1509. called (either because you haven't specified your own, or you explicitly
  1510. call it from within your custom filter proc.
  1511.  
  1512. +++++++++++++++++++++++++++
  1513.  
  1514. >From andrew@csgrad.cs.vt.edu (Andrew Southwick)
  1515. Date: 19 Aug 1994 14:02:53 GMT
  1516. Organization: IBM SWSD, Lexington, KY, USA
  1517.  
  1518. b-clark@nwu.edu (Brian Clark) writes:
  1519. > phixus@netcom.com (Chris DeSalvo) wrote:
  1520. >> SetDialogDefaultItem and
  1521. >> SetDialogCancelItem
  1522.  
  1523. >They work fine, but only when the standard system dialog filter proc is
  1524. >called (either because you haven't specified your own, or you explicitly
  1525. >call it from within your custom filter proc.
  1526.  
  1527. Also, these traps have to be defined by the headers that you are using.
  1528. The headers that come with ThinkC up til (at least) 6.0 don't define
  1529. them, so you have to do one of those
  1530.     void SetDialogDefaultItem( blah ) 0xYYYY;
  1531. things at the top of your code.  Sorry, don't have the trap number with me.
  1532. It's mentioned in the ThinkC Programming Primer, though, and ThinkRef
  1533. might have the trap numbers, too.
  1534.  
  1535.  
  1536. Best Premises,                                      andrew@csgrad.cs.vt.edu
  1537. Andrew R. Southwick                                 asouthwick@vnet.ibm.com
  1538.  
  1539.  
  1540. +++++++++++++++++++++++++++
  1541.  
  1542. >From Dave Falkenburg <falken@apple.com>
  1543. Date: Thu, 1 Sep 1994 16:52:43 GMT
  1544. Organization: Apple Computer, Inc.
  1545.  
  1546. In article <phixusCuo7K0.Fzr@netcom.com> Chris DeSalvo, phixus@netcom.com
  1547. writes:
  1548. >SetDialogDefaultItem and
  1549. >SetDialogCancelItem
  1550. >
  1551. >The traps are definied in the Universal Headers but they don't seem to
  1552. >work.  They are not documented in the Dialog Manager section of
  1553. >NIM:Toolbox Essentials.
  1554.  
  1555. They were documented in the Technotes, but do to a race condition were never
  1556. included with IM:Toolbox Essentials. During the PowerPC effort, we figured
  1557. this out and added them to the headers.
  1558.  
  1559. >Are these entries just place holders or is there some magic I have not
  1560. >learned to get them to work?
  1561.  
  1562. Yes they work, but you must supply a dialog filter proc which calls
  1563. StdFilterProc in order to make them work as advertised. See technote
  1564. TB 37 "Pending Update Perils".
  1565.  
  1566. Whenever using modal dialogs it is best to always supply a filter proc
  1567. to keep pending updates in your application from blocking background
  1568. processing. The same technote which documents these calls explains this
  1569. problem in more detail.
  1570.  
  1571. Watch for an upcomming issue of MacTech, which will include "Sprocket",
  1572. an application shell with code that deals with these calls.
  1573.  
  1574. -Dave Falkenburg
  1575. -Apple Computer, Inc.
  1576.  
  1577. ---------------------------
  1578.  
  1579. >From Bernd Mathiske <mathiske@dbis1.informatik.uni-hamburg.de>
  1580. Subject: Stack sniffer - how can I turn it off?
  1581. Date: 16 Aug 1994 18:02:53 GMT
  1582. Organization: Universitaet Hamburg
  1583.  
  1584. Dear internet-community!
  1585.  
  1586. Help!
  1587. Do you know how I can get rid of the very annoying vbl-"stack sniffer"
  1588. that causes error #28 when I move the stack pointer into the heap?
  1589. I do not see the point why I should not have my stacks allocated
  1590. where I like them to be, in particular if there are several of them
  1591. between which I want to switch around, the latter allowing me to
  1592. implement coroutines.
  1593.  
  1594. Any idea anybody?
  1595.  
  1596. %  ======================================================
  1597. %                Bernd Mathiske
  1598. %  voice:        +49-40/54715-330
  1599. %  e-mail:       mathiske@dbis1.informatik.uni-hamburg.de
  1600. %  snail mail:   Universitaet Hamburg
  1601. %                Vogt-Koelln-Strasse 30
  1602. %                D-22527 Hamburg, Deutschland
  1603. %  ======================================================
  1604.  
  1605. +++++++++++++++++++++++++++
  1606.  
  1607. >From bobo@reed.edu (Eric Bowman)
  1608. Date: 17 Aug 1994 04:24:16 GMT
  1609. Organization: Reed College,  Portland, Oregon
  1610.  
  1611. In article <32qv0d$7t1@rzsun02.rrz.uni-hamburg.de>,
  1612. Bernd Mathiske  <mathiske@dbis1.informatik.uni-hamburg.de> wrote:
  1613. >Do you know how I can get rid of the very annoying vbl-"stack sniffer"
  1614. >that causes error #28 when I move the stack pointer into the heap?
  1615. >I do not see the point why I should not have my stacks allocated
  1616. >where I like them to be, in particular if there are several of them
  1617. >between which I want to switch around, the latter allowing me to
  1618. >implement coroutines.
  1619.  
  1620. To disable the stack sniffer,
  1621.  
  1622. Ptr oldTopOfStack = LMGetStackLowPoint();
  1623. LMSetStackLowPoint(NULL);
  1624.  
  1625. To undo the damage,
  1626.  
  1627. LMSetStackLowPoint(oldTopOfStack);
  1628.  
  1629. cheers,
  1630. bobo
  1631.  
  1632. +++++++++++++++++++++++++++
  1633.  
  1634. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  1635. Date: Wed, 17 Aug 1994 17:20:16 +0800
  1636. Organization: Department of Computer Science, The University of Western Australia
  1637.  
  1638. In article <32qv0d$7t1@rzsun02.rrz.uni-hamburg.de>, Bernd Mathiske
  1639. <mathiske@dbis1.informatik.uni-hamburg.de> wrote:
  1640.  
  1641. >Do you know how I can get rid of the very annoying vbl-"stack sniffer"
  1642. >that causes error #28 when I move the stack pointer into the heap?
  1643. >I do not see the point why I should not have my stacks allocated
  1644. >where I like them to be, in particular if there are several of them
  1645. >between which I want to switch around, the latter allowing me to
  1646. >implement coroutines.
  1647.  
  1648. No it won't (:  There are problems with putting the stack in the heap,
  1649. specifically a number of toolbox calls expect the stack to be above the
  1650. heap and get very upset when it isn't.  If you want to do co-routines, use
  1651. the Thread Manager.
  1652.  
  1653. btw You can disable the stack sniffer by putting 0 into the low memory
  1654. global StkLowPt.  I've also seen Apple code that disables it by patching
  1655. SysError and preventing error 28 getting through (:
  1656. -- 
  1657. Quinn "The Eskimo!"      <quinn@cs.uwa.edu.au>     "Support HAVOC!"
  1658. Department of Computer Science, The University of Western Australia
  1659.  
  1660. +++++++++++++++++++++++++++
  1661.  
  1662. >From ari@world.std.com (Ari I Halberstadt)
  1663. Date: Wed, 17 Aug 1994 17:54:25 GMT
  1664. Organization: The World Public Access UNIX, Brookline, MA
  1665.  
  1666. In article <quinn-1708941720160001@edu-dynamic1.educ.ecel.uwa.edu.au>,
  1667. Quinn "The Eskimo!" <quinn@cs.uwa.edu.au> wrote:
  1668. >In article <32qv0d$7t1@rzsun02.rrz.uni-hamburg.de>, Bernd Mathiske
  1669. ><mathiske@dbis1.informatik.uni-hamburg.de> wrote:
  1670. >
  1671. >>Do you know how I can get rid of the very annoying vbl-"stack sniffer"
  1672. >>that causes error #28 when I move the stack pointer into the heap?
  1673. >>I do not see the point why I should not have my stacks allocated
  1674. >>where I like them to be, in particular if there are several of them
  1675. >>between which I want to switch around, the latter allowing me to
  1676. >>implement coroutines.
  1677. >
  1678. >No it won't (:  There are problems with putting the stack in the heap,
  1679. >specifically a number of toolbox calls expect the stack to be above the
  1680. >heap and get very upset when it isn't.  If you want to do co-routines, use
  1681. >the Thread Manager.
  1682.  
  1683. You can fool them into being happy by setting 3 low-memory globals.
  1684. It's tricky though.
  1685. -- 
  1686. Ari Halberstadt                                 ari@world.std.com
  1687. One generation passes away, and another generation comes: but the
  1688. earth abides for ever. -- Ecclesiastes, 1:4.
  1689.  
  1690. +++++++++++++++++++++++++++
  1691.  
  1692. >From sparent@mv.us.adobe.com (Sean Parent)
  1693. Date: Wed, 17 Aug 1994 22:48:18 GMT
  1694. Organization: Adobe Systems Incorporated
  1695.  
  1696. It is tricky to fool the toolbox because one of the lowmem globals that
  1697. has to be set is the HiHeapMark (thus confusing the memory manager). The
  1698. cleanest way (other than using the Thread Manager) that I have seen is to
  1699. just BlockMoveData your alternate stacks into the stack. It costs a few
  1700. extra cycles but can save you a boat load of time getting other stuff
  1701. working.
  1702.  
  1703. In article <Cuoxqq.L94@world.std.com>, ari@world.std.com (Ari I
  1704. Halberstadt) wrote:
  1705.  
  1706. > In article <quinn-1708941720160001@edu-dynamic1.educ.ecel.uwa.edu.au>,
  1707. > Quinn "The Eskimo!" <quinn@cs.uwa.edu.au> wrote:
  1708. > >In article <32qv0d$7t1@rzsun02.rrz.uni-hamburg.de>, Bernd Mathiske
  1709. > ><mathiske@dbis1.informatik.uni-hamburg.de> wrote:
  1710. > >
  1711. > >>Do you know how I can get rid of the very annoying vbl-"stack sniffer"
  1712. > >>that causes error #28 when I move the stack pointer into the heap?
  1713. > >>I do not see the point why I should not have my stacks allocated
  1714. > >>where I like them to be, in particular if there are several of them
  1715. > >>between which I want to switch around, the latter allowing me to
  1716. > >>implement coroutines.
  1717. > >
  1718. > >No it won't (:  There are problems with putting the stack in the heap,
  1719. > >specifically a number of toolbox calls expect the stack to be above the
  1720. > >heap and get very upset when it isn't.  If you want to do co-routines, use
  1721. > >the Thread Manager.
  1722. > You can fool them into being happy by setting 3 low-memory globals.
  1723. > It's tricky though.
  1724. > -- 
  1725. > Ari Halberstadt                                 ari@world.std.com
  1726. > One generation passes away, and another generation comes: but the
  1727. > earth abides for ever. -- Ecclesiastes, 1:4.
  1728.  
  1729. -- 
  1730. Sean Parent
  1731. sparent@mv.us.adobe.com
  1732. "The critical driver of every successful project is its focused ruthlessness."
  1733.         Grady Booch
  1734.  
  1735. +++++++++++++++++++++++++++
  1736.  
  1737. >From ari@world.std.com (Ari I Halberstadt)
  1738. Date: Thu, 18 Aug 1994 03:00:21 GMT
  1739. Organization: The World Public Access UNIX, Brookline, MA
  1740.  
  1741. In article <sparent-1708941448180001@macb042.mv.us.adobe.com>,
  1742. Sean Parent <sparent@mv.us.adobe.com> wrote:
  1743. >It is tricky to fool the toolbox because one of the lowmem globals that
  1744. >has to be set is the HiHeapMark (thus confusing the memory manager). The
  1745. >cleanest way (other than using the Thread Manager) that I have seen is to
  1746. >just BlockMoveData your alternate stacks into the stack. It costs a few
  1747. >extra cycles but can save you a boat load of time getting other stuff
  1748. >working.
  1749.  
  1750. There is a third solution. It is very similar to the Thread Manager,
  1751. but has context switch times from over 2 to nearly 4 times faster than
  1752. the Thread Manager. It's my free Thread Library (not to be confused
  1753. with Apple's ThreadsLib). It's called ThreadLib-10d4.hqx (or some
  1754. similar name, depending on the archive), includes full source code,
  1755. and is available from info-mac mirrors in the dev/src directory, and
  1756. from the alt.sources.mac archive. I tested it under emulation on a
  1757. PowerPC, and it ran fine. It has been tested on a Plus, Quadra 950,
  1758. and PowerPC, with systems 6.0.5, 7Pro, and whatever the PowerPC needed
  1759. (7.1.1, or something like that). My Thread Library does not run
  1760. in native PPC mode, and does not support preemptive threads.
  1761. -- 
  1762. Ari Halberstadt                                 ari@world.std.com
  1763. One generation passes away, and another generation comes: but the
  1764. earth abides for ever. -- Ecclesiastes, 1:4.
  1765.  
  1766. +++++++++++++++++++++++++++
  1767.  
  1768. >From Clinton Bauder <gecko1@applelink.apple.com>
  1769. Date: Tue, 23 Aug 1994 19:28:07 GMT
  1770. Organization: Apple Computer Inc.
  1771.  
  1772. In article <32qv0d$7t1@rzsun02.rrz.uni-hamburg.de> Bernd Mathiske,
  1773. mathiske@dbis1.informatik.uni-hamburg.de writes:
  1774. >Do you know how I can get rid of the very annoying vbl-"stack sniffer"
  1775. >that causes error #28 when I move the stack pointer into the heap?
  1776. >I do not see the point why I should not have my stacks allocated
  1777. >where I like them to be, in particular if there are several of them
  1778. >between which I want to switch around, the latter allowing me to
  1779. >implement coroutines.
  1780. >
  1781. >Any idea anybody?
  1782.  
  1783. You should use the Thread Manager if you can.  If you can't - say your
  1784. code is a driver or something - then you can disable the Stack Sniffer by
  1785. clearing the low memory global StkLowPt (0x110 - 32 bits).  Of course
  1786. when you are done using your private stack you should put it back to what
  1787. it was.  Also your stack should be at least 4K in size plus whatever you
  1788. expect to use in your own code.  This should be sufficient for most
  1789. interrupt code which might end up using your stack.  Note that this is
  1790. not the worlds most forward compatible kind of programming but if you can
  1791. accept the possibility of future incompatibility then this is a useful
  1792. technique.
  1793.  
  1794. Clinton
  1795. - -------------------------------------------------------------
  1796. Clinton Bauder        | Opinions expressed are very likely to
  1797. SCSI Grunt and Chief  | be entirely different from the official
  1798. Herpetoculturist      | party line of Apple Computer Inc.
  1799. Apple Computer Inc.   | Support your local herp society.
  1800. - -------------------------------------------------------------
  1801.  
  1802. +++++++++++++++++++++++++++
  1803.  
  1804. >From ari@world.std.com (Ari I Halberstadt)
  1805. Date: Wed, 24 Aug 1994 01:37:38 GMT
  1806. Organization: The World Public Access UNIX, Brookline, MA
  1807.  
  1808. In article <1994Aug23.192807.4763@gallant.apple.com>,
  1809. Clinton Bauder  <gecko1@applelink.apple.com> wrote:
  1810. >it was.  Also your stack should be at least 4K in size plus whatever you
  1811. >expect to use in your own code.  This should be sufficient for most
  1812. >interrupt code which might end up using your stack.  Note that this is
  1813.  
  1814. Actually, you want at least MinStack bytes, plus whatever your app
  1815. will need. MinStack is a low-mem global.
  1816.  
  1817.  
  1818. -- 
  1819. Ari Halberstadt                                 ari@world.std.com
  1820. One generation passes away, and another generation comes: but the
  1821. earth abides for ever. -- Ecclesiastes, 1:4.
  1822.  
  1823. +++++++++++++++++++++++++++
  1824.  
  1825. >From Dave Falkenburg <falken@apple.com>
  1826. Date: Wed, 31 Aug 1994 16:44:55 GMT
  1827. Organization: Apple Computer, Inc.
  1828.  
  1829. In article <32qv0d$7t1@rzsun02.rrz.uni-hamburg.de> Bernd Mathiske,
  1830. mathiske@dbis1.informatik.uni-hamburg.de writes:
  1831. >Dear internet-community!
  1832. >
  1833. >Help!
  1834. >Do you know how I can get rid of the very annoying vbl-"stack sniffer"
  1835. >that causes error #28 when I move the stack pointer into the heap?
  1836. >I do not see the point why I should not have my stacks allocated
  1837. >where I like them to be, in particular if there are several of them
  1838. >between which I want to switch around, the latter allowing me to
  1839. >implement coroutines.
  1840. >
  1841. >Any idea anybody?
  1842.  
  1843. The stack sniffer can be turned off by zeroing out STKLOWPT. However, this
  1844. isn't enough to keep the Macintosh working if you plan on calling the
  1845. toolbox from your coroutines.
  1846.  
  1847. The supported way of doing coroutines on the Macintosh is to use the
  1848. Thread Manager. The Thread Manager is available in the form of an
  1849. extension for System 7.0 or later, and has been rolled into the base
  1850. system software in System 7.5.
  1851.  
  1852. The current version of the extension is 2.0.1, which includes support for
  1853. PowerPC machines.
  1854.  
  1855. -Dave Falkenburg
  1856. -Apple Computer, Inc.
  1857.  
  1858. ---------------------------
  1859.  
  1860. End of C.S.M.P. Digest
  1861. **********************
  1862.  
  1863.  
  1864.  
  1865.